const oldMethods = Array.prototype
// 改写只改写部分方法
export const arrMethods = Object.create(oldMethods)
// 以下方法会直接影响到原数组的，所以进行重写
const methods = ['push', 'pop', 'shift', 'unshift', 'slice', 'reverse', 'sort']
methods.forEach((method) => {
  arrMethods[method] = function (...args) {
    // 1. 具备之前的功能
    const result = oldMethods[method].apply(this, args)
    // 2. 对新增的数据进行数据劫持
    let inserted
    switch (method) {
      case 'push':
      case 'unshift':
        inserted = args
        break
      case 'splice':
        console.log(args) // [2,0,1]
        inserted = args.slice(2)
      default:
        break
    }
    this.__ob__.observeArray(inserted)
    return result
  }
})
